package avicit.cbb.techclass.tabledefine.commtablemanager.action.service;

import avicit.cbb.techclass.tabledefine.commtablemanager.domain.*;
import avicit.cbb.techclass.tabledefine.commtempletmanager.domain.CbbTempletCode;
import avicit.platform6.commons.utils.web.TreeNode;
import avicit.platform6.core.dao.Paging;
import avicit.platform6.core.domain.BeanBase;
import avicit.platform6.core.exception.DaoException;
import avicit.platform6.core.jdbc.Page;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Vector;

/**
 * 参考模版实现类接口 创建时间：2014-08-19
 *
 * @author 朱锋
 *
 */
public interface CommTableManagerService {

	/**
	 * 更新列信息
	 *
	 * @author 朱锋
	 * @param cbbTabColumnsArray
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void updateCbbTabColumns(CbbTabColumns[] cbbTabColumnsArray, String sysId, String nodeId, String nodeName, String tableName, boolean isTrue, Map<String, Object> param)
			throws Exception;

	/**
	 * 根据列信息ID获取该对象
	 *
	 * @author 朱锋
	 * @param id
	 * @return CbbTabColumns
	 * @throws
	 */
	public CbbTabColumns getCbbTabColumnsById(String id) throws Exception;

	/**
	 * 根据sysId和nodeId查询tableId
	 *
	 * @author 朱锋
	 * @param sysId
	 * @param nodeId
	 * @return String
	 * @throws
	 */
	public String getTableIdBysnId(String sysId, String nodeId);

	/**
	 * 获取列信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @param sysId
	 * @return Paging<CbbTabColumns>
	 * @throws
	 */
	public Map<String, Object> getPageDetailList(Paging<CbbTabColumns> page, Map<String, Object> parameter, String sysId) throws Exception;

	/**
	 * 生成动态表
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param sysId
	 * @throws DaoException
	 *             void
	 * @throws
	 */
	public void insertdbTable(String tableId, String sysId, String orgId) throws DaoException;

	/**
	 * 删除基本字段信息
	 *
	 * @author 朱锋
	 * @param cbbTabColumns
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCommCbbTabColumnsById(CbbTabColumns[] cbbTabColumnsArray, String sysId, String nodeId, String nodeName, String tableName, String isTrueTable, String orgId, Map<String, Object> param)
			throws Exception;

	/**
	 * 新增列各种信息
	 *
	 * @author 朱锋
	 * @param cbbTabColumnsArray
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void insertCbbTabColumns(CbbTabColumns[] cbbTabColumnsArray, String sysId, String nodeId, String nodeName, String tableName, String orgId, String deptId,
			String loginUserId, String loginIp, String isTrueTable) throws Exception;

	/**
	 * 递归获取Tree当前节点下数据
	 *
	 * @author 朱锋
	 * @param id
	 * @param sysId
	 * @param orgId
	 * @return List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> getTableTreeNodes(String id, String sysId, String orgId);

	/**
	 * 复制参考模板字段信息
	 *
	 * @author 朱锋
	 * @param ids
	 * @param sysId
	 * @param tableName
	 *            void
	 * @throws
	 */
	public void copyCommTempletField(String ids, String sysId, String tableName, String orgId, String deptId) throws Exception;

	/**
	 * 验证字段是否重名
	 *
	 * @author 朱锋
	 * @param ids
	 * @param sysId
	 * @param tableName
	 * @return String
	 * @throws
	 */
	public boolean checkField(String id, String sysId, String tableName) throws Exception;

	/**
	 * 根据系统标识ID，表名，获取表ID
	 *
	 * @author 朱锋
	 * @param sysId
	 * @param tableName
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getCbbTableId(String sysId, String tableName) throws Exception;

	/**
	 * 创建表与节点关联关系 参数：系统标识ID，节点ID，库表ID
	 *
	 * @author 朱锋
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void createCbbTabNode(String sysId, String nodeId, String tableId, String orgId, String deptId, String loginUserId, String loginIp) throws Exception;

	/**
	 * 获取关系ID 参数：系统标识ID，节点ID，库表ID
	 *
	 * @author 朱锋
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getCbbTabNodeId(String sysId, String nodeId, String tableId) throws Exception;

	/**
	 * 获取列代码信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageCodeDetailList(Paging<CbbTempletCode> page, Map<String, Object> parameter) throws Exception;

	/**
	 * 新增代码维护信息
	 *
	 * @author 朱锋
	 * @param cbbTabColCode
	 *            void
	 * @throws
	 */
	public void insertTabColCode(CbbTabColCode cbbTabColCode);

	/**
	 * 批量新增代码维护信息
	 *
	 * @author 朱锋
	 * @param insertData
	 *            void
	 * @throws
	 */
	public void insertTabColCodeByJson(String insertData, String tableId, String sysId) throws Exception;

	/**
	 * 删除代码维护信息
	 *
	 * @author 朱锋
	 * @param cbbTabColCode
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTabColCodeById(CbbTabColCode cbbTabColCode) throws Exception;

	/**
	 * 更新代码维护信息
	 *
	 * @author 朱锋
	 * @param cbbTabColCodeArray
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void updateCbbTabColCode(List<CbbTabColCode> cbbTabColCodeArray, String sysId, String nodeId, String nodeName) throws Exception;

	/**
	 * 代码维护中更新列信息
	 *
	 * @author 朱锋
	 * @param cbbTabColumnsArray
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void updateCbbTabColumnsTemp(CbbTabColumns[] cbbTabColumnsArray, String sysId, String nodeId, String nodeName) throws Exception;

	/**
	 * 新增系统通用代码信息
	 *
	 * @author 朱锋
	 * @param cid
	 * @param tid
	 * @param fid
	 * @param sysId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void insertSysCode(String cid, String tid, String fid, String sysId, String orgId, String deptId) throws Exception;

	/**
	 * 根据代码维护信息ID获取该对象
	 *
	 * @author 朱锋
	 * @param id
	 * @return CbbTabColCode
	 * @throws
	 */
	public CbbTabColCode getCbbTabColCodeById(String id) throws Exception;

	/**
	 * 删除系统通用代码信息
	 *
	 * @author 朱锋
	 * @param colId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbSysCodeRecord(String colId) throws Exception;

	/**
	 * 根据表信息ID获取表信息
	 *
	 * @author 朱锋
	 * @param id
	 * @return CbbTables
	 * @throws
	 */
	public CbbTables getCbbTablesById(String id);

	/**
	 * 根据sysId和tableName查询tableId
	 *
	 * @author 朱锋
	 * @param sysId
	 * @param tableName
	 * @return String
	 * @throws
	 */
	public String getTableIdBysysIdAndTableName(String sysId, String tableName, Map<String, Object> param) throws Exception;

	/**
	 * 验证菜单路径是否存在
	 *
	 * @author 朱锋
	 * @param path
	 * @return boolean
	 * @throws
	 */
	public boolean checkMenuPath(String path) throws Exception;

	/**
	 * 创建菜单
	 *
	 * @author 朱锋
	 * @param path
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 *            void
	 * @throws
	 */
	public void createMenu(String path, String sysId, String tableName, Map<String, Object> param) throws Exception;

	/**
	 * 获取节点著录定义列表信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageNodeRecordList(Paging<CbbTabColumns> page, Map<String, Object> parameter);

	/**
	 * 验证是否节点著录表存在数据
	 *
	 * @author 朱锋
	 * @param sysId
	 * @param tableId
	 * @param nodeId
	 * @return boolean
	 * @throws
	 */
	public boolean checkNodeRecord(String tabNodeId, String tableId);

	/**
	 * 更新节点著录信息
	 *
	 * @author 朱锋
	 * @param cbbTabColumnsArray
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void updateCbbTabRecord(List<CbbTabColumns> list, String sysId, String tabNodeId, String orgId, String deptId, String tableId) throws Exception;

	/**
	 * 获取基本列信息(节点著录定义)
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageNodeRecordColList(Paging<CbbTabColumns> page, Map<String, Object> parameter);

	/**
	 * 验证此真实值是否存在
	 *
	 * @author 朱锋
	 * @param id
	 * @param columnId
	 * @param lookupCode
	 * @return boolean
	 * @throws
	 */
	public boolean checkCode(String columnId, String lookupCode, String id);

	/**
	 * 根据tableId、nodeId获取tabNodeId（文件类型取‘个人文件’‘部门文件’节点ID作为tabNodeId）
	 * @author 郭亮
	 * @param sysId 必填
	 * @param tableId 必填
	 * @param nodeId
	 * @return
	 * @throws Exception List<Object>
	 */
	public List<Object> getCbbTabNodeIdByTableId(String sysId, String tableId, String nodeId) throws Exception;

	/**
	 * 验证必著
	 *
	 * @author 朱锋
	 * @param tableId
	 * @param cid
	 * @return boolean
	 * @throws
	 */
	public boolean checkColIsMust(String tableId) throws  Exception;

	/**
	 * 获取排序主表信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return
	 * @throws Exception
	 *             Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageTabSortList(Paging<CbbTabColumns> page, Map<String, Object> parameter) throws Exception;

	/**
	 * 获取排序子表信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return
	 * @throws Exception
	 *             Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getCbbTabColSortData(Paging<CbbTabColumns> page, Map<String, Object> parameter) throws Exception;

	/**
	 * 删除排序字段
	 *
	 * @author 朱锋
	 * @param id
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTabSort(String id) throws Exception;

	/**
	 * 新增字段排序信息
	 *
	 * @author 朱锋
	 * @param cbbTabColSort
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void insertCbbTabColSorte(CbbTabColSort cbbTabColSort) throws Exception;

	/**
	 * 根据排序字段ID获取该对象
	 *
	 * @author 朱锋
	 * @param id
	 * @return
	 * @throws Exception
	 *             CbbTabColSort
	 * @throws
	 */
	public CbbTabColSort getCbbTabColSortById(String id) throws Exception;

	/**
	 * 更新字段排序信息
	 *
	 * @author 朱锋
	 * @param beanBase
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void updateCbbTabColSort(BeanBase beanBase) throws Exception;

	/**
	 * 获取分类检索主表信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return
	 * @throws Exception
	 *             Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getPageTabSearchList(Paging<CbbTabColumns> page, Map<String, Object> parameter) throws Exception;

	/**
	 * 获取分类检索子表信息
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @return
	 * @throws Exception
	 *             Page<Map<String,Object>>
	 * @throws
	 */
	public Page<Map<String, Object>> getCbbTabColSearchData(Paging<CbbTabColumns> page, Map<String, Object> parameter) throws Exception;

	/**
	 * 删除分类检索
	 *
	 * @author 朱锋
	 * @param id
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTabSearch(String id) throws Exception;

	/**
	 * 新增分类检索信息
	 *
	 * @author 朱锋
	 * @param cbbTabColSearch
	 *            void
	 * @throws
	 */
	public void insertCbbTabColSearch(CbbTabColSearch cbbTabColSearch) throws Exception;

	/**
	 * 根据分类检索ID获取该对象
	 *
	 * @author 朱锋
	 * @param id
	 * @return
	 * @throws Exception
	 *             CbbTabColSort
	 * @throws
	 */
	public CbbTabColSearch getCbbTabColSearchById(String id) throws Exception;

	/**
	 * 更新分类检索信息
	 *
	 * @author 朱锋
	 * @param cbbTabColSort
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void updateCbbTabColSearch(CbbTabColSearch cbbTabColSearch) throws Exception;

	/**
	 * 导出结构数据
	 *
	 * @author 朱锋
	 * @param headValue
	 * @param head
	 * @param data
	 * @param out
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void exportData(List<String> headValue, List<String> head, List<Map<String, Object>> data, ByteArrayOutputStream out) throws Exception;

	/**
	 * 构造文件名
	 *
	 * @author 朱锋
	 * @param tableId
	 * @return String
	 * @throws
	 */
	public String getFileName(String tableId);

	/**
	 * 导出结构模板
	 *
	 * @author 朱锋
	 * @param headValue
	 * @param out
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void exportExcelModule(List<String> headValue, ByteArrayOutputStream out) throws Exception;

	/**
	 * 解析2003excel文件
	 *
	 * @author 朱锋
	 * @param fileName
	 * @return
	 * @throws IOException
	 *             Map<String,Vector<Vector<String>>>
	 * @throws
	 */
	public Map<String, Vector<Vector<String>>> readXls(String fileName) throws IOException;

	/**
	 * 解析2007excel文件
	 *
	 * @author 朱锋
	 * @param fileName
	 * @return
	 * @throws IOException
	 *             Map<String,Vector<Vector<String>>>
	 * @throws
	 */
	public Map<String, Vector<Vector<String>>> readXlsx(String fileName) throws Exception;

	/**
	 * 检测excel数据合法性
	 *
	 * @author 朱锋
	 * @param datas
	 * @param tableId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void testExcel(Vector<Vector<String>> datas, String tableId) throws Exception;

	/**
	 * 将excel文件中的数据添加到数据库表中
	 *
	 * @author 朱锋
	 * @param datas
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 * @param orgId
	 * @param deptId
	 * @param loginUserId
	 * @param loginIp
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void insertFromExcel(Vector<Vector<String>> datas, String sysId, String nodeId, String nodeName, String tableName, String orgId, String deptId, String loginUserId,
			String loginIp,String isTrueTable) throws Exception;

	/**
	 * 获取基本字段（基本字段及设置为显示的初始化字段）
	 *
	 * @author 朱锋
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @param tableId
	 *            * @param isTemplet (是否加载全部字段 N：加载基本字段 Y：加载全部字段)
	 * @return
	 * @throws Exception
	 *             List<Map<String,Object>>
	 * @throws
	 */
	public List<Map<String, Object>> getCbbTabColumnsJiben(String orgId, String deptId, String sysId, String nodeId, String tableId, String isTemplet) throws Exception;

	/**
	 * cbbTabColumns该tid下的列最大排序值
	 *
	 * @author 朱锋
	 * @param tid
	 * @return int
	 * @throws
	 */
	public int selectMaxOrder(String tid);

	/**
	 * 代码维护模块检测excel数据合法性
	 *
	 * @author 朱锋
	 * @param datas
	 * @param columnId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void testColCodeExcel(Vector<Vector<String>> datas, String columnId) throws Exception;

	/**
	 * 代码维护模块,将excel文件中的数据添加到数据库表中
	 *
	 * @author 朱锋
	 * @param datas
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param columnId
	 * @param tableId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void inserColCodetFromExcel(Vector<Vector<String>> datas, String orgId, String deptId, String sysId, String columnId, String tableId) throws Exception;

	/**
	 * 新增或更新列信息后，重新更新列排序号（1.2.3.4....）
	 *
	 * @author 朱锋
	 * @param tableId
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void updateColOrder(String tableId) throws Exception;

	/**
	 * 复制库结构字段
	 *
	 * @param ids
	 * @param sysId
	 * @param tableName
	 * @param orgId
	 * @param deptId
	 * @throws Exception
	 */
	public void copyCbbTabColumns(String ids, String sysId, String tableName, String orgId, String deptId, Map<String, Object> param) throws Exception;

	/**
	 * 初始化字段同步业务表
	 *
	 * @author 朱锋
	 * @param sysId
	 * @param orgId
	 * @param deptId
	 * @param loginUserId
	 * @param loginIp
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void sameCbbTabColumnsData(String sysId, String orgId, String deptId, String loginUserId, String loginIp) throws Exception;

	/**
	 * 根据tableId查找表是否为真实表
	 *
	 * @author 朱锋
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String findTableisTureTable(String tableId) throws Exception;

	/**
	 * 根据生成方式规则ID获取该对象
	 *
	 * @author 朱锋
	 * @param id
	 * @return CbbTabFormSelect
	 * @throws
	 */
	public CbbTabFormSelect getCbbTabFormSelectById(String id);

	/**
	 * 删除生成方式规则信息
	 *
	 * @author 朱锋
	 * @param cbbTabFormSelect
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTabFormSelectById(CbbTabFormSelect cbbTabFormSelect) throws Exception;

	/**
	 * 新增生成方式规则信息
	 *
	 * @author 朱锋
	 * @param cbbTabFormSelect
	 *            void
	 * @throws
	 */
	public void insertCbbTabFormSelect(CbbTabFormSelect cbbTabFormSelect);

	/**
	 * 参考模板复制字段信息加载库结构树
	 *
	 * @author 朱锋
	 * @param id
	 * @param copyNodeData
	 * @return
	 * @throws Exception
	 *             List<TreeNode>
	 * @throws
	 */
	public List<TreeNode> recurFindTreeNodesByParentIdInCommTemplet(String id, String copyNodeData, String sysId, String orgId) throws Exception;

	/**
	 * 获取索引主界面表格数据
	 *
	 * @author 朱锋
	 * @param page
	 * @param parameter
	 * @param sysId
	 * @return
	 * @throws Exception
	 *             Map<String,Object>
	 * @throws
	 */
	public Map<String, Object> getIndexPageDetailList(Paging<CbbTabColumns> page, Map<String, Object> parameter, String sysId) throws Exception;

	/**
	 * 索引主页面数据删除方法
	 *
	 * @author 朱锋
	 * @param deleteData
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 * @param isTrueTable
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void deleteCbbTabIndexDataById(String deleteData, String sysId, String nodeId, String nodeName, String tableName, String orgId, String deptId) throws Exception;

	/**
	 * 索引主页面数据新增方法
	 *
	 * @author 朱锋
	 * @param insertData
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 * @param orgId
	 * @param deptId
	 * @param loginUserId
	 * @param loginIp
	 * @param isTrueTable
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void insertCbbTabIndex(String insertData, String sysId, String nodeId, String nodeName, String tableName, String orgId, String deptId, String loginUserId, String loginIp)
			throws Exception;

	/**
	 * 根据索引ID获取索引数据
	 *
	 * @author 朱锋
	 * @param id
	 * @return CbbTabColIndex
	 * @throws
	 */
	public CbbTabColIndex getCbbTabColIndexById(String id);

	/**
	 * 根据字段ID查找字段设置的通用代码
	 *
	 * @author 郭亮
	 * @param columnId
	 * @return
	 * @throws Exception
	 *             List<Object[]>
	 * @throws
	 */
	public List<Object[]> getLookupCodeByColumnId(String columnId) throws Exception;

	/**
	 * 获取列信息(只用于著录定义页面初始化加载数据)
	 *
	 * @author 郭亮
	 * @param page
	 * @param parameter
	 * @param sysId
	 * @return
	 * @throws Exception
	 *             Map<String,Object>
	 * @throws
	 */
	public Map<String, Object> getPageDetailListForZL(Paging<CbbTabColumns> page, Map<String, Object> parameter, String sysId) throws Exception;

	/**
	 * 根据userId查找userName
	 *
	 * @author 郭亮
	 * @param id
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getUserNameById(String id) throws Exception;

	/**
	 * 根据deptId查找deptName
	 *
	 * @author 郭亮
	 * @param id
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getDeptNameById(String id) throws Exception;

	/**
	 * 根据sysCode查找sysName
	 *
	 * @author 郭亮
	 * @param code
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getSysNameByCode(String code) throws Exception;

	/**
	 * 根据表ID获取设置为可见的字段集合
	 *
	 * @author 朱锋
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public List<Object[]> getCbbTabColsByTableId(String tableId) throws Exception;

	/***
	 * 配置组合项时，构造可组合字段下拉列表(lookupName:表名.字段名,lookupCode:tableId.columnId)
	 *
	 * @author 郭亮
	 * @param tableId
	 * @param colType
	 * @param colId
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getColNmaeByColType(String tableId, String colType, String colId, String orgId, String deptId, String sysId, String nodeId) throws Exception;

	/***
	 * 根据字段名获取字段ID
	 *
	 * @author 郭亮
	 * @param name
	 * @param tableId
	 * @return
	 * @throws Exception
	 *             String
	 * @throws
	 */
	public String getColumnIdByName(String name, String tableId) throws Exception;

	/***
	 * 保存组合项配置信息
	 *
	 * @author 郭亮
	 * @param sourceColumnId
	 * @param configColumns
	 * @param configInput
	 * @param tableId
	 * @param orgId
	 * @param deptId
	 * @param deptId
	 * @param orders
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void saveConfigGroup(String sourceColumnId, String[] configColumns, String[] configInput, String tableId, String orgId, String deptId, String sysId, String[] orders)
			throws Exception;

	/***
	 * 初始化获取组合项配置信息
	 *
	 * @author 郭亮
	 * @param sourceId
	 * @return
	 * @throws Exception
	 *             Map<String,Object>
	 * @throws
	 */
	public Map<String, Object> getGroupConfig(String sourceId) throws Exception;

	/***
	 * 判断索引名是否唯一
	 *
	 * @author 郭亮
	 * @param indexName
	 * @return
	 * @throws Exception
	 *             boolean
	 * @throws
	 */
	public boolean checkIndexNameIsUnique(String indexName, String insertData) throws Exception;

	/***
	 * 索引主页面数据更新方法
	 *
	 * @author 郭亮
	 * @param updatetData
	 * @param sysId
	 * @param nodeId
	 * @param nodeName
	 * @param tableName
	 * @param orgId
	 * @param deptId
	 * @param loginUserId
	 * @param loginIp
	 * @throws Exception
	 *             void
	 * @throws
	 */
	public void updateCbbTabIndex(String updatetData, String sysId, String nodeId, String nodeName, String tableName, String orgId, String deptId, String loginUserId,
			String loginIp) throws Exception;

	/***
	 * 检测父节点是否为2级节点
	 *
	 * @author 郭亮
	 * @param nodeId
	 * @return
	 * @throws Exception
	 */
	public boolean checkNodeIsSecond(String nodeId) throws Exception;

	/***
	 * 检测字段是否为案卷级表中字段
	 *
	 * @author 郭亮
	 * @param tableId
	 * @param nodeId
	 * @return
	 */
	public boolean checkTabIsAJJ(String tableId, String nodeId) throws Exception;

	/***
	 * 查找可配置字段构造下拉列表数据（用于统计生成）
	 *
	 * @author 郭亮
	 * @param tableId
	 * @param colType
	 * @param colId
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @return
	 * @throws Exception
	 */
	public String getColNameByColTypeForTJSC(String tableId, String colType, String colId, String orgId, String deptId, String sysId, String nodeId) throws Exception;

	/***
	 * 统计生成显示页面初始化获取数据
	 *
	 * @author 郭亮
	 * @param sourceColumnId
	 * @return List<String> 0:configStr；1:operationStr
	 * @throws Exception
	 */
	public List<String> getTjscConfigformanager(String sourceColumnId) throws Exception;

	/***
	 * 统计生成编辑页面初始化获取配置信息
	 *
	 * @author 郭亮
	 * @param sourceId
	 * @return
	 * @throws Exception
	 */
	public Map<String, Object> getTjscConfig(String sourceId) throws Exception;

	/***
	 * 保存统计生成配置信息
	 *
	 * @author 郭亮
	 * @param sourceColumnId
	 * @param configColumns
	 * @param configInput
	 * @param tableId
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param orders
	 * @param operation
	 * @throws Exception
	 */
	public void saveConfigTJSC(String sourceColumnId, String[] configColumns, String[] configInput, String tableId, String orgId, String deptId, String sysId, String[] orders,
			String operation) throws Exception;

	/***
	 * 根据表ID获取表中文名
	 *
	 * @author 郭亮
	 * @param tabId
	 * @return
	 * @throws Exception
	 */
	public String getTabTitleByTabId(String tabId) throws Exception;

	/***
	 * 删除配置信息（组合项或统计生成）
	 *
	 * @author 郭亮
	 * @param sourColumnId
	 * @throws Exception
	 */
	public void deleteConfig(String sourColumnId) throws Exception;

	/***
	 * 获取不可见字段的列信息
	 *
	 * @author 郭亮
	 * @param page
	 * @param parameter
	 * @param sysId
	 * @return
	 */
	public Map<String, Object> getHiddenPageDetailList(Paging<CbbTabColumns> page, Map<String, Object> parameter, String sysId) throws Exception;

	/***
	 * 自定义页面，根据ID查询具体的值
	 *
	 * @author 朱锋
	 * @param value
	 * @param path
	 * @return
	 * @throws Exception
	 */
	public String getCustomValue(String value, String path) throws Exception;

	/***
	 * 保存组合项配置信息
	 *
	 * @author 郭亮
	 * @param sourceColumnId
	 *            源字段ID
	 * @param json
	 *            组合项配置json
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @throws Exception
	 */
	public void saveConfigGroupNew(String sourceColumnId, String json, String orgId, String deptId, String sysId) throws Exception;

	/***
	 * 根据源字段获取组合项配置信息（配置页面初始化时使用）
	 *
	 * @author 郭亮
	 * @param sourceId
	 * @return [{
	 *         'tgtColumn':'','tgtInput':'','order':''},{'tgtColumn':'','tgtInput':'','order':''
	 *         } ]
	 * @throws Exception
	 */
	public String getGroupConfigNew(String sourceId) throws Exception;

	/**
	 * 获取可配置的分类检索字段
	 *
	 * @author 郭亮
	 * @param sysId
	 * @param orgId
	 * @param deptId
	 * @param userId
	 * @return
	 * @throws Exception
	 */
	public String getSearchCol(String sysId, String orgId, String deptId, String userId) throws Exception;

	/**
	 * 新增系统代码维护信息
	 *
	 * @author 朱锋
	 * @throws
	 */
	public void insertTabColSysCode(CbbTabColSysCode cbbTabColSysCode);

	/**
	 * 获取表层级结构类型（0:案卷，1:盒）
	 * @author 郭亮
	 * @param nodeId
	 * @return
	 * @throws Exception String
	 * @throws
	 */
	public String getTabLayerType(String nodeId) throws Exception;

	/**
	 * 根据tabNodeId删除节点著录定义配置信息
	 * @author 郭亮
	 * @param tabNodeId
	 * @throws Exception void
	 */
	public void deleteCbbTabNodeRecordByTabNodeId(String tabNodeId) throws Exception;

	/**
	 * 根据表ID删除组合项、统计生成配置信息
	 * @author 郭亮
	 * @param tableId
	 * @throws Exception void
	 */
	public void deleteGroupConfigByTableId(String tableId) throws Exception;

	/**
	 * 获取顺带字段
	 * @param tableId
	 * @param colType
	 * @param colId
	 * @param orgId
	 * @param deptId
	 * @param sysId
	 * @param nodeId
	 * @return
	 * @throws Exception String
	 * @throws
	 */
	public String getColNmaeByColTypeIncidentally(String tableId, String colType, String colId, String orgId, String deptId, String sysId, String nodeId) throws Exception;

/**
 * 还原数据
 * @param tabNodeId
 * @throws Exception
 */
	public void restoreCbbTabRecordData( String tabNodeId,String tableId) throws Exception;
/**
 * 同步节点著录定义字段
 * @param cbbTabColumnsArray
 * @param sysId
 * @param nodeId
 * @param nodeName
 * @param tableName
 * @param orgId
 * @param deptId
 * @param loginUserId
 * @param loginIp
 * @param isTrueTable
 * @throws Exception
 */
	public void syntabNodeRecordData(CbbTabColumns[] cbbTabColumnsArray, String sysId, String nodeId, String nodeName, String tableName, String orgId,String deptId) throws Exception;

	/**
	 * 同步树结构和库表
	 * @param param
	 * @throws Exception void
	 * @throws
	 */
	public void doSyncArchiveClassAndTables(Map<String, Object> param) throws Exception;

	/**
	 * 清理组织下所有库表数据
	 * @param param
	 * @throws Exception void
	 * @throws
	 */
	public void deleteCommTableManagerDatasByOrgId(Map<String, Object> param) throws Exception;

}
